﻿using GDM.Hogar.Entidades;
using GDM.Hogar.Repositorios.Contratos;
using GDM.Hogar.Repositorios.Core;
using GDM.Hogar.Repositorios.Soporte;
using System.Collections.Generic;
using System.Data;

namespace GDM.Hogar.Repositorios
{
    public class ObraSocialRepositorio : Repositorio, IObraSocialRepositorio
    {
        public ObraSocialRepositorio(IDbManager dbManager)
            : base(dbManager)
        {
        }

        protected override string ProcActualizar
        {
            get
            {
                return ProcedimientosAlmacenados.ObraSocial.Actualizar;
            }
        }

        protected override string ProcInsertar
        {
            get { return ProcedimientosAlmacenados.ObraSocial.Insertar; }
        }

        public IList<ObraSocial> ObtenerObrasSociales()
        {
            IList<Parametro> parametros = new List<Parametro>();
            return Obtener<ObraSocial>(ProcedimientosAlmacenados.ObraSocial.ObtenerTodas, parametros);
        }

        public ObraSocial CrearObraSocial(string nombre)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@Nombre", DbType.String, ParameterDirection.Input, nombre));
            return Insertar<ObraSocial>(parametros);
        }

        public void ActivarObraSocial(int obraSocialId, bool activa)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ObraSocialId", DbType.Int64, ParameterDirection.Input, obraSocialId));
            parametros.Add(CrearParametro("@Activa", DbType.Boolean, ParameterDirection.Input, activa));
            EjecutarConsulta(ProcedimientosAlmacenados.ObraSocial.Activar, parametros);
        }

        public void ActualizarObraSocial(ObraSocial obraSocial)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ObraSocialId", DbType.Int64, ParameterDirection.Input, obraSocial.ObraSocialId));
            parametros.Add(CrearParametro("@Descripcion", DbType.String, ParameterDirection.Input, obraSocial.Descripcion));
            Actualizar(parametros);
        }

        public bool ExisteAfiliadoObraSocial(int integranteId, int obraSocialId, long nroAfiliado)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@IntegranteId", DbType.Int64, ParameterDirection.Input, integranteId));
            parametros.Add(CrearParametro("@ObraSocialId", DbType.Int64, ParameterDirection.Input, obraSocialId));
            parametros.Add(CrearParametro("@NroAfiliado", DbType.Int64, ParameterDirection.Input, nroAfiliado));
            return Obtener<Integrante>(ProcedimientosAlmacenados.Integrante.PorObraSocialYNroAfiliado, parametros).Count > 0;
        }
    }
}